iT邦幫忙

2023 iThome 鐵人賽

DAY 27
0

在鐵人賽一開始的時候

花了一些時間介紹 EC2 的 user-data

在 EC2 初始化的時候建立一些基礎設定

第八天的時候介紹 Systems Manager

可以對於 EC2 有更多的操作

不過對於佈署到 EC2 的 Application

仍有個尚未解決的問題

那就是 Log 的轉發

縱使 Application 層可以設定 Log 的 Rotation

但是這樣仍無法達到 Cloud Native 的精神

昨天我們介紹的 CloudWatch 就可以將服務轉成 CloudNative

只要在 EC2 中安裝 Agent

並將 Log 轉發到 CloudWatch Log 中

這樣從服務到 Log 的監控完全就在雲端中

安裝 CloudWatch 代理程式

要將 Log 轉發到 CloudWatch Log 中

必要條件就是需要在 EC2 中裝 Agent

並對於要轉發的 Log 做一些設定

就可以將 Log 轉發

下載 CloudWatch 代理程式套件

Amazon 所提供的作業系統 Amazon Linux 2

可以直接下指定進行安裝

sudo yum install amazon-cloudwatch-agent

其他的作業系統則需要另外從 S3 上下載進行安裝

架構 平台 下載連結 簽章檔案連結
x86-64 Amazon Linux 和 Amazon Linux 2 https://amazoncloudwatch-agent.s3.amazonaws.com/amazon_linux/amd64/latest/amazon-cloudwatch-agent.rpm https://amazoncloudwatch-agent.s3.amazonaws.com/amazon_linux/amd64/latest/amazon-cloudwatch-agent.rpm.sig
x86-64 Centos https://amazoncloudwatch-agent.s3.amazonaws.com/centos/amd64/latest/amazon-cloudwatch-agent.rpm https://amazoncloudwatch-agent.s3.amazonaws.com/centos/amd64/latest/amazon-cloudwatch-agent.rpm.sig
x86-64 Redhat https://amazoncloudwatch-agent.s3.amazonaws.com/redhat/amd64/latest/amazon-cloudwatch-agent.rpm https://amazoncloudwatch-agent.s3.amazonaws.com/redhat/amd64/latest/amazon-cloudwatch-agent.rpm.sig
x86-64 SUSE https://amazoncloudwatch-agent.s3.amazonaws.com/suse/amd64/latest/amazon-cloudwatch-agent.rpm https://amazoncloudwatch-agent.s3.amazonaws.com/suse/amd64/latest/amazon-cloudwatch-agent.rpm.sig
x86-64 Debian https://amazoncloudwatch-agent.s3.amazonaws.com/debian/amd64/latest/amazon-cloudwatch-agent.deb https://amazoncloudwatch-agent.s3.amazonaws.com/debian/amd64/latest/amazon-cloudwatch-agent.deb.sig
x86-64 Ubuntu https://amazoncloudwatch-agent.s3.amazonaws.com/ubuntu/amd64/latest/amazon-cloudwatch-agent.deb https://amazoncloudwatch-agent.s3.amazonaws.com/ubuntu/amd64/latest/amazon-cloudwatch-agent.deb.sig
x86-64 Oracle https://amazoncloudwatch-agent.s3.amazonaws.com/oracle_linux/amd64/latest/amazon-cloudwatch-agent.rpm https://amazoncloudwatch-agent.s3.amazonaws.com/oracle_linux/amd64/latest/amazon-cloudwatch-agent.rpm.sig
x86-64 macOS https://amazoncloudwatch-agent.s3.amazonaws.com/darwin/amd64/latest/amazon-cloudwatch-agent.pkg https://amazoncloudwatch-agent.s3.amazonaws.com/darwin/amd64/latest/amazon-cloudwatch-agent.pkg.sig
x86-64 Windows https://amazoncloudwatch-agent.s3.amazonaws.com/windows/amd64/latest/amazon-cloudwatch-agent.msi https://amazoncloudwatch-agent.s3.amazonaws.com/windows/amd64/latest/amazon-cloudwatch-agent.msi.sig
ARM64 Amazon Linux 2 https://amazoncloudwatch-agent.s3.amazonaws.com/amazon_linux/arm64/latest/amazon-cloudwatch-agent.rpm https://amazoncloudwatch-agent.s3.amazonaws.com/amazon_linux/arm64/latest/amazon-cloudwatch-agent.rpm.sig
ARM64 Redhat https://amazoncloudwatch-agent.s3.amazonaws.com/redhat/arm64/latest/amazon-cloudwatch-agent.rpm https://amazoncloudwatch-agent.s3.amazonaws.com/redhat/arm64/latest/amazon-cloudwatch-agent.rpm.sig
ARM64 Ubuntu https://amazoncloudwatch-agent.s3.amazonaws.com/ubuntu/arm64/latest/amazon-cloudwatch-agent.deb https://amazoncloudwatch-agent.s3.amazonaws.com/ubuntu/arm64/latest/amazon-cloudwatch-agent.deb.sig
ARM64 SUSE https://amazoncloudwatch-agent.s3.amazonaws.com/suse/arm64/latest/amazon-cloudwatch-agent.rpm https://amazoncloudwatch-agent.s3.amazonaws.com/suse/arm64/latest/amazon-cloudwatch-agent.rpm.sig

下載 CloudWatch 代理程式。針對 Linux 伺服器,請輸入以下資訊。對於 download-link,請使用上表中適當的下載連結。

wget download-link

針對執行 Windows Server 的伺服器,請下載以下檔案:
https://amazoncloudwatch-agent.s3.amazonaws.com/windows/amd64/latest/amazon-cloudwatch-agent.msi

下載套件之後,您可以選擇驗證套件簽章。如需更多詳細資訊,請參閱 驗證 CloudWatch 代理程式套件的簽章

安裝套件。若您在 Linux 伺服器上下載了 RPM 套件,請變更到包含該套件的目錄,然後輸入以下資訊:
sudo rpm -U ./amazon-cloudwatch-agent.rpm

若您在 Linux 伺服器上下載了 DEB 套件,請變更到包含該套件的目錄,然後輸入以下資訊:
sudo dpkg -i -E ./amazon-cloudwatch-agent.deb

若您在執行 Windows Server 的伺服器上下載了 MSI 套件,請變更到包含該套件的目錄,然後輸入以下資訊:
msiexec /i amazon-cloudwatch-agent.msi

建立 IAM 角色以使用 CloudWatch 代理程式

雖然也可以使用 IAM User

但是 AWS 比較建議 EC2 所使用的 IAM Role 去賦予相關權限操作

而不是另外建立 IAM User 和 Credentials 去增加維護成本

IAM Role 需要 Attach 這個 Policy CloudWatchAgentServerRole

在您的伺服器上安裝及執行 CloudWatch 代理程式

驗證完簽章和安裝完 CloudWatch 代理程式以後

先使用 Wizard 建立 CloudWatch Agent 設定檔

sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-config-wizard

在執行 Windows Server 的伺服器上,執行下列命令來啟動精靈:

cd "C:\Program Files\Amazon\AmazonCloudWatchAgent"

.\amazon-cloudwatch-agent-config-wizard.exe

使用 Wizard 建立完成後的設定檔會是個 json 檔

需要將這個 json 檔的路徑記錄起來啟動程式的時候需要用到

在執行 Linux 的 EC2 執行個體上,輸入以下命令:

sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -a fetch-config -m ec2 -s -c file:configuration-file-path

在執行 Windows Server 的 EC2 執行個體上,從 PowerShell 主控台輸入以下內容:

& "C:\Program Files\Amazon\AmazonCloudWatchAgent\amazon-cloudwatch-agent-ctl.ps1" -a fetch-config -m ec2 -s -c file:configuration-file-path

記得將 configuration-file-path 替換成自己的檔案路徑

如果使用的作業系統是 Amazon Linux 2

那產生的 config.json 預計位於 /opt/aws/amazon-cloudwatch-agent/bin/config.json

對於 metrics 要傳送的資訊大家可以再翻找官方文件

裡面會有指標設定的相關說明

{
        "agent": {
                "metrics_collection_interval": 1,
                "run_as_user": "CWAgent"
        },
        "logs": {
                "logs_collected": {
                        "files": {
                                "collect_list": [
                                        {
                                                "file_path": "Log 在 EC2上的路徑",
                                                "log_group_name": "填寫 Log Group 的名稱",
                                                "log_stream_name": "填寫Stream Name",
                                                "retention_in_days": 90
                                        },
                                ]
                        }
                }
        },
        "metrics": {
                "aggregation_dimensions": [
                        [
                                "InstanceId"
                        ]
                ],
                "append_dimensions": {
                        "AutoScalingGroupName": "${aws:AutoScalingGroupName}",
                        "ImageId": "${aws:ImageId}",
                        "InstanceId": "${aws:InstanceId}",
                        "InstanceType": "${aws:InstanceType}"
                },
                "metrics_collected": {
                        "collectd": {
                                "metrics_aggregation_interval": 0
                        },
                        "cpu": {
                                "measurement": [
                                        "cpu_usage_idle",
                                        "cpu_usage_iowait",
                                        "cpu_usage_user",
                                        "cpu_usage_system"
                                ],
                                "metrics_collection_interval": 1,
                                "resources": [
                                        "*"
                                ],
                                "totalcpu": false
                        },
                        "disk": {
                                "measurement": [
                                        "used_percent",
                                        "inodes_free"
                                ],
                                "metrics_collection_interval": 1,
                                "resources": [
                                        "*"
                                ]
                        },
                        "diskio": {
                                "measurement": [
                                        "io_time",
                                        "write_bytes",
                                        "read_bytes",
                                        "writes",
                                        "reads"
                                ],
                                "metrics_collection_interval": 1,
                                "resources": [
                                        "*"
                                ]
                        },
                        "mem": {
                                "measurement": [
                                        "mem_used_percent"
                                ],
                                "metrics_collection_interval": 1
                        },
                        "netstat": {
                                "measurement": [
                                        "tcp_established",
                                        "tcp_time_wait"
                                ],
                                "metrics_collection_interval": 1
                        },
                        "statsd": {
                                "metrics_aggregation_interval": 0,
                                "metrics_collection_interval": 10,
                                "service_address": ":8125"
                        },
                        "swap": {
                                "measurement": [
                                        "swap_used_percent"
                                ],
                                "metrics_collection_interval": 1
                        }
                }
        }
}

參考資料:

  1. 安裝 CloudWatch 代理程式
  2. 使用精靈建立 CloudWatch 代理程式組態檔案

上一篇
Day 26 CloudWatch 簡介
下一篇
Day 28 針對 CloudWatch Log 篩選資料反向建立指標監控
系列文
上完 AWS 線上課程就打算應徵相關工作是否搞錯甚麼30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言